/**
 * 封装 fetch 请求
 * @param {string} url - 请求地址
 * @param {string} method - 请求方法：GET、POST、PUT 等
 * @param {Object} [body] - 请求体（POST/PUT 需要）
 * @param {Object} [headers] - 自定义请求头
 * @returns {Promise<any>}
 */
async function request(url, method, body = null, headers = {}) {
  const config = {
    method: method.toUpperCase(),
    headers: {
      'Content-Type': 'application/json',
      ...headers,
    },
  };

  // 如果是 POST 或 PUT，添加 body
  if (body && (config.method === 'POST' || config.method === 'PUT')) {
    config.body = JSON.stringify(body);
  }

  try {
    const response = await fetch(url, config);

    // 判断是否成功
    if (!response.ok) {
      const errorData = await response.json().catch(() => ({}));
      throw new Error(errorData.message || `HTTP 错误！状态码: ${response.status}`);
    }

    // 返回 JSON 数据
    return await response.json();
  } catch (error) {
    console.error('请求失败:', error);
    throw error;
  }
}